home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
smaltalk
/
gnu_st.lha
/
gnu_st
/
smalltalk-1.1.1
/
stix
/
genevt.st
< prev
next >
Wrap
Text File
|
1991-09-12
|
13KB
|
370 lines
"======================================================================
|
| Copyright (C) 1990, 1991 Free Software Foundation, Inc.
| Written by Steve Byrne.
|
| This file is part of GNU Smalltalk.
|
| GNU Smalltalk is free software; you can redistribute it and/or modify it
| under the terms of the GNU General Public License as published by the Free
| Software Foundation; either version 1, or (at your option) any later version.
|
| GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
| FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
| details.
|
| You should have received a copy of the GNU General Public License along with
| GNU Smalltalk; see the file COPYING. If not, write to the Free Software
| Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
======================================================================"
"
| Change Log
| ============================================================================
| Author Date Change
| sbyrne 24 May 90 created.
|
"
Smalltalk at: #DataTypeMap put: Dictionary new.
Smalltalk at: #DataTypeSize put: Dictionary new.
Smalltalk at: #MapInfo put: Dictionary new!
DataTypeMap at: #card8 put: #ubyte.
DataTypeMap at: #bool put: #byte.
DataTypeMap at: #keycode put: #byte.
DataTypeMap at: #button put: #byte.
DataTypeMap at: #card16 put: #uword.
DataTypeMap at: #bitmask put: #uword.
DataTypeMap at: #int16 put: #word.
DataTypeMap at: #setOfKeyButMask put: #word.
DataTypeMap at: #card32 put: #ulong.
DataTypeMap at: #window put: #long.
DataTypeMap at: #drawable put: #long.
DataTypeMap at: #atom put: #long.
DataTypeMap at: #colormap put: #long.
DataTypeMap at: #timestamp put: #long.
DataTypeMap at: #keymap put: 'getUnpaddedString: 31'.
DataTypeSize at: #card8 put: 1.
DataTypeSize at: #bool put: 1.
DataTypeSize at: #keycode put: 1.
DataTypeSize at: #button put: 1.
DataTypeSize at: #card16 put: 2.
DataTypeSize at: #bitmask put: 2.
DataTypeSize at: #int16 put: 2.
DataTypeSize at: #setOfKeyButMask put: 2.
DataTypeSize at: #card32 put: 4.
DataTypeSize at: #window put: 4.
DataTypeSize at: #drawable put: 4.
DataTypeSize at: #atom put: 4.
DataTypeSize at: #colormap put: 4.
DataTypeSize at: #timestamp put: 4.
DataTypeSize at: #keymap put: 31.
MapInfo at: #window put: 'self mappedId: '.
MapInfo at: #drawable put: 'self mappedId: '.
MapInfo at: #atom put: 'self mappedId: '.
MapInfo at: #colormap put: 'self mappedId: '
!
Object subclass: #XEvent
instanceVariableNames: 'sequenceNumber'
classVariableNames: 'EventMap'
poolDictionaries: ''
category: 'X hacking'
!
!Object class methodsFor: 'hacking'!
genErrorInit
| stream |
stream _ FileStream open: 'Xerr.st' mode: 'w'.
stream close.
!
genEventInit
| stream |
stream _ FileStream open: 'Xevt.st' mode: 'w'.
stream close.
!
genErrorClass: className args: anArray
| stream |
stream _ FileStream open: 'Xerr.st' mode: 'a'.
self genErrorClassDef: className on: stream args: anArray.
self genErrorClassMethods: className on: stream args: anArray.
stream nextPut: Character newPage.
stream nl.
stream close
!
genEventClass: className args: anArray
| stream |
stream _ FileStream open: 'Xevt.st' mode: 'a'.
self genEventClassDef: className on: stream args: anArray.
self genEventClassMethods: className on: stream args: anArray.
stream nextPut: Character newPage.
stream nl.
stream close
!
" private definitions "
genErrorClassDef: className on: aStream args: anArray
self genClassDef: 'Error' forClass: className on: aStream args: anArray
!
genEventClassDef: className on: aStream args: anArray
self genClassDef: 'Event' forClass: className on: aStream args: anArray
!
genClassDef: type forClass: className on: aStream args: anArray
'X', type, ' subclass: #' printOn: aStream.
className, type printOn: aStream.
aStream nl.
self genClassInstVars: anArray on: aStream.
' classVariableNames: ''''
poolDictionaries: ''''
category: ''X hacking''
!' printOn: aStream.
aStream nl.
aStream nl
!
genErrorClassMethods: className on: aStream args: anArray
self genClassMethods: 'Error' forClass: className on: aStream args: anArray
!
genEventClassMethods: className on: aStream args: anArray
self genClassMethods: 'Event' forClass: className on: aStream args: anArray
!
genClassMethods: type forClass: className on: aStream args: anArray
| totalBytes dataType |
'!', className, type, ' class methodsFor: ''instance creation''!
newFrom: aStream
^self new initFrom: aStream
!!
' printOn: aStream.
self genAccessorMethods: type forClass: className on: aStream args: anArray.
'!', className, type, ' methodsFor: ''private''!
' printOn: aStream.
'initFrom: aStream' printOn: aStream. aStream nl.
totalBytes _ 0.
anArray do:
[ :var | ' ' printOn: aStream.
var size > 1
ifTrue: [ (var at: 1) printOn: aStream.
' _ ' printOn: aStream ].
'aStream ' printOn: aStream.
dataType _ (var at: var size).
(self mapType: dataType) printOn: aStream.
totalBytes _ totalBytes + (self typeSize: dataType).
'. ' printOn: aStream. aStream nl ].
' aStream skipBytes: ' printOn: aStream.
(31 - totalBytes) printOn: aStream.
aStream nl.
'!!' printOn: aStream.
aStream nl.
aStream nl.
!
genAccessorMethods: type forClass: className on: aStream args: anArray
| name varType |
'!', className, type, ' methodsFor: ''accessing''!
' printOn: aStream.
anArray do:
[ :var | var size > 1
ifTrue: [ name _ (var at: 1).
varType _ (var at: var size).
name printOn: aStream.
aStream nl.
' ^' printOn: aStream.
(MapInfo includesKey: varType)
ifTrue: [ (MapInfo at: varType), ' ',
name printOn: aStream]
ifFalse: [ name printOn: aStream ].
aStream nl.
'!' printOn: aStream.
aStream nl.
aStream nl ].
].
'!' printOn: aStream.
aStream nl.
aStream nl.
!
mapType: aType
^DataTypeMap at: aType
ifAbsent: [ self error: 'no such type: ', (aType printString) ]
!
typeSize: aType
^DataTypeSize at: aType
ifAbsent: [ self error: 'no such type: ', (aType printString) ]
!
genClassInstVars: anArray on: aStream
| varName |
aStream tab.
'instanceVariableNames: ''' printOn: aStream.
anArray do:
[ :var | var size = 2
ifTrue: [ (#(sequenceNumber)
indexOf: (varName _ var at: 1)) = 0
ifTrue: [ varName, ' ' printOn: aStream ] ]
].
'''' printOn: aStream.
aStream nl
!!
Object genEventInit.
Object genEventClass: 'KeyPress'
args: #((detail keycode) (sequenceNumber card16) (time timestamp)
(root window) (event window) (child window)
(rootX int16) (rootY int16) (eventX int16) (eventY int16)
(state setOfKeyButMask) (sameScreen bool)).
Object genEventClass: 'KeyRelease'
args: #((detail keycode) (sequenceNumber card16) (time timestamp)
(root window) (event window) (child window)
(rootX int16) (rootY int16) (eventX int16) (eventY int16)
(state setOfKeyButMask) (sameScreen bool)).
Object genEventClass: 'ButtonPress'
args: #((detail button) (sequenceNumber card16) (time timestamp)
(root window) (event window) (child window)
(rootX int16) (rootY int16) (eventX int16) (eventY int16)
(state setOfKeyButMask) (sameScreen bool)).
Object genEventClass: 'ButtonRelease'
args: #((detail button) (sequenceNumber card16) (time timestamp)
(root window) (event window) (child window)
(rootX int16) (rootY int16) (eventX int16) (eventY int16)
(state setOfKeyButMask) (sameScreen bool)).
Object genEventClass: 'MotionNotify'
args: #((detail card8) (sequenceNumber card16) (time timestamp)
(root window) (event window) (child window)
(rootX int16) (rootY int16) (eventX int16) (eventY int16)
(state setOfKeyButMask) (sameScreen bool)).
Object genEventClass: 'EnterNotify'
args: #((detail card8) (sequenceNumber card16) (time timestamp)
(root window) (event window) (child window)
(rootX int16) (rootY int16) (eventX int16) (eventY int16)
(state setOfKeyButMask) (mode card8) (focus card8)).
Object genEventClass: 'LeaveNotify'
args: #((detail card8) (sequenceNumber card16) (time timestamp)
(root window) (event window) (child window)
(rootX int16) (rootY int16) (eventX int16) (eventY int16)
(state setOfKeyButMask) (mode card8) (focus card8)).
Object genEventClass: 'FocusIn'
args: #((detail card8) (sequenceNumber card16) (event window)
(mode card8)).
Object genEventClass: 'FocusOut'
args: #((detail card8) (sequenceNumber card16) (event window)
(mode card8)).
Object genEventClass: 'KeymapNotify'
args: #((keys keymap)).
Object genEventClass: 'Expose'
args: #((card8) (sequenceNumber card16) (window window)
(x card16) (y card16) (width card16) (height card16)
(count card16)).
Object genEventClass: 'GraphicsExposure'
args: #((card8) (sequenceNumber card16) (drawable drawable)
(x card16) (y card16) (width card16) (height card16)
(minorOp card16) (count card16) (majorOp card8)).
Object genEventClass: 'NoExposure'
args: #((card8) (sequenceNumber card16) (drawable drawable)
(minorOp card16) (majorOp card8)).
Object genEventClass: 'VisibilityNotify'
args: #((card8) (sequenceNumber card16) (window window)
(state card8)).
Object genEventClass: 'CreateNotify'
args: #((card8) (sequenceNumber card16) (parent window) (window window)
(x int16) (y int16) (width card16) (height card16)
(borderWidth card16) (overrideRedirect bool)).
Object genEventClass: 'DestroyNotify'
args: #((card8) (sequenceNumber card16) (event window) (window window)).
Object genEventClass: 'UnmapNotify'
args: #((card8) (sequenceNumber card16) (event window) (window window)
(fromConfigure bool)).
Object genEventClass: 'MapNotify'
args: #((card8) (sequenceNumber card16) (event window) (window window)
(overrideRedirect bool)).
Object genEventClass: 'MapRequest'
args: #((card8) (sequenceNumber card16) (parent window) (window window)).
Object genEventClass: 'ReparentNotify'
args: #((card8) (sequenceNumber card16)
(event window) (window window) (parent window)
(x int16) (y int16) (overrideRedirect bool)).
Object genEventClass: 'ConfigureNotify'
args: #((card8) (sequenceNumber card16)
(event window) (window window) (aboveSibling window)
(x int16) (y int16) (width card16) (height card16)
(borderWidth card16) (overrideRedirect bool)).
Object genEventClass: 'ConfigureRequest'
args: #((stackMode card8) (sequenceNumber card16)
(parent window) (window window) (sibling window)
(x int16) (y int16) (width card16) (height card16)
(borderWidth card16) (valueMask bitmask)).
Object genEventClass: 'GravityNotify'
args: #((card8) (sequenceNumber card16)
(event window) (window window)
(x int16) (y int16)).
Object genEventClass: 'ResizeRequest'
args: #((card8) (sequenceNumber card16)
(window window)
(width card16) (height card16)).
Object genEventClass: 'CirculateNotify'
args: #((card8) (sequenceNumber card16)
(event window) (window window) (window)
(place card8)).
Object genEventClass: 'CirculateRequest'
args: #((card8) (sequenceNumber card16)
(parent window) (window window) (card32)
(place card8)).
Object genEventClass: 'PropertyNotify'
args: #((card8) (sequenceNumber card16)
(window window) (atom atom)
(time timestamp) (state card8))
!
Object genEventClass: 'SelectionClear'
args: #((card8) (sequenceNumber card16)
(time timestamp) (owner window) (selection atom)).
Object genEventClass: 'SelectionRequest'
args: #((card8) (sequenceNumber card16)
(time timestamp) (owner window) (requestor window)
(selection atom) (target atom) (property atom)).
Object genEventClass: 'SelectionNotify'
args: #((card8) (sequenceNumber card16)
(time timestamp) (requestor window)
(selection atom) (target atom) (property atom)).
Object genEventClass: 'ColormapNotify'
args: #((card8) (sequenceNumber card16)
(window window) (colormap colormap)
(new bool) (state card8)).
Object genEventClass: 'ClientMessage'
args: #((format card8) (sequenceNumber card16)
(window window) (type atom)
"says: 20 data").
Object genEventClass: 'MappingNotify'
args: #((card8) (sequenceNumber card16)
(request card8) (keycode keycode)
(count card8)).
!
Smalltalk quitPrimitive!